package zjw.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import zjw.pojo.Table;

public class MpUpload {

	public static void main(String[] args) {
		test("dic_shoptype", "dicShoptype");
	}

	public static void test(String tableName, String entityName) {
		AutoGenerator mpg = new AutoGenerator();
		String name="店铺logo";
		String id="enterplogo";
		String formValidate="formValidate";
		String packagename = "dic";
		 String codepath = "\\develop\\code\\springboottest\\myspringboottest\\src\\main\\java";
		  codepath="D:\\develop\\vue\\front-web-admin\\src\\pages\\shop/"; 
		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		gc.setOutputDir(codepath);
		gc.setFileOverride(true);
		gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false
		gc.setEnableCache(false);// XML 二级缓存
		gc.setBaseResultMap(true);// XML ResultMap
		gc.setBaseColumnList(false);// XML columList
		// 自定义文件命名，注意 %s 会自动填充表实体属性！
		gc.setMapperName("%sMapper");
		gc.setXmlName("%sParams");
		gc.setServiceName("upload.vue");
		// gc.setServiceImplName("%sServiceDiy");
		// gc.setControllerName("%sAction");
		mpg.setGlobalConfig(gc);

		// 数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.MYSQL);
		dsc.setTypeConvert(new MySqlTypeConvert() {
			// 自定义数据库表字段类型转换【可选】
			@Override
			public DbColumnType processTypeConvert(String fieldType) {
				System.out.println("转换类型：" + fieldType);
				// 注意！！processTypeConvert 存在默认类型转换，如果不是你要的效果请自定义返回、非如下直接返回。
				return super.processTypeConvert(fieldType);
			}
		});
		dsc.setDriverName("com.mysql.jdbc.Driver");
		dsc.setUsername("auslese");
		dsc.setPassword("nova_Auslese_123");
		dsc.setUrl("jdbc:mysql://rm-2ze370pa1y7zi3u33vo.mysql.rds.aliyuncs.com:3306/auslese?characterEncoding=utf8");
		mpg.setDataSource(dsc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
		// strategy.setTablePrefix(new String[] { "tlog_", "app" });// 此处可以修改为您的表前缀
		strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
		strategy.setInclude(new String[] { tableName }); // 需要生成的表

		mpg.setStrategy(strategy);

		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setParent("");

		pc.setService("");
		mpg.setPackageInfo(pc);
		  InjectionConfig cfg = new InjectionConfig() {
	            @Override
	            public void initMap() {
	                Map<String, Object> map = new HashMap<String, Object>();
	                map.put("name", name);
	                map.put("id", id);
	                map.put("formValidate", formValidate);
	                this.setMap(map);
	            }
	        };
	        mpg.setCfg(cfg);
		TemplateConfig tc = new TemplateConfig();

		tc.setXml(null);// 不生成本来的,生成自定义的
		tc.setController(null);
		tc.setMapper(null);
		tc.setEntity(null);
		tc.setService("/templates/upload.vue");
		tc.setServiceImpl(null);
		// 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
		mpg.setTemplate(tc);
		// 执行生成
		mpg.execute();

		// 打印注入设置【可无】
		// System.err.println(mpg.getCfg().getMap().get("abc"));
	}

	public static String captureName(String name) {
		name = name.substring(0, 1).toUpperCase() + name.substring(1);
		return name;

	}
	// mpg.setTemplateEngine(new MyFreemarkerTemplateEngine());
}
